﻿using Spire.Doc;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MergeWordApp
{
    public partial class Form1 : Form
    {
        private string Word1Path = "";

        private string Word2Path = "";
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            chooseWord1();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            chooseWord2();
        }

        private void chooseWord1()
        {
            string path1 = chooseWord();
            label1.Text = path1;
            Word1Path = path1;
        }

        private void chooseWord2()
        {
            string path2 = chooseWord();
            label2.Text = path2;
            Word2Path = path2;
        }

        private string chooseWord()
        {
            //创建一个对话框对象
            OpenFileDialog ofd = new OpenFileDialog();
            //为对话框设置标题
            ofd.Title = "请选择上传的word文件";
            //设置筛选的图片格式
            ofd.Filter = "Word Files(*.doc)| *.docx";
            //设置是否允许多选
            ofd.Multiselect = false;
            //如果你点了“确定”按钮
            if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                //获得文件的完整路径（包括名字后后缀）
                string filePath = ofd.FileName;

                //找到文件名比如“1.jpg”前面的那个“\”的位置
                int position = filePath.LastIndexOf("\\");
                //从完整路径中截取出来文件名“1.jpg”
                string fileName = filePath.Substring(position + 1);
                //读取选择的文件，返回一个流
                using (Stream stream = ofd.OpenFile())
                {
                    //创建一个流，用来写入得到的文件流（注意：创建一个名为“Images”的文件夹，如果是用相对路径，必须在这个程序的Degug目录下创建
                    //如果是绝对路径，放在那里都行，我用的是相对路径）
                    using (FileStream fs = new FileStream(@"./word/" + fileName, FileMode.OpenOrCreate))
                    {
                        //将得到的文件流复制到写入流中
                        stream.CopyTo(fs);
                        //将写入流中的数据写入到文件中
                        fs.Flush();
                    }
                }
                return fileName;
            }
            return null;
        }

        /// <summary>
        /// 合并
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(Word1Path) || String.IsNullOrEmpty(Word2Path))
            {
                MessageBox.Show("请上传两个word文件");
                return;
            }
            //加载文档1
            Document document = new Document();
            document.LoadFromFile(@"./word/"+Word1Path, FileFormat.Docx);
            //将文档2的所有内容插入到文档1
            document.InsertTextFromFile(@"./word/" + Word2Path, FileFormat.Docx);
            //将结果另存为到另一个单独的文档
            document.SaveToFile(@"./Data/"+"MergeFiles.docx", FileFormat.Docx);
            MessageBox.Show("合并成功");
        }
    }
}
